package org.Modulo3;

import org.Modulo1.*;
import org.Modulo2.*;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public final class GestorProductos {

    private static ArrayList<Producto> listaProductos = new ArrayList<Producto>();

    /**
     * ******************************************************************
     ** Devuelve un Array de String con todas las descripciones de los ** *
     * productos **
     *******************************************************************
     */
    public static String[] devolverDescProducto() {
        
        String[] productos = new String[listaProductos.size()];
        for (int i = 0; i < listaProductos.size(); i++) {
            productos[i] = listaProductos.get(i).getDescripcion();
        }

        return productos;
    }

    /**
     * *****************************************************************
     ** Devuelve un Array de String con todos los ID de los productos ** * y
     * carga los Productos de la base de datos **
     ******************************************************************
     */
    /**
     * ****************************************************
     ** Devuelve el precio del producto con la ID pasada ** 
     *****************************************************
     */
    public static double getPrecio(String desc) {
        double precio = 0;
        for (int i = 0; i < listaProductos.size(); i++) {
            if (listaProductos.get(i).getDescripcion() == desc) {
                precio = listaProductos.get(i).getPrecio();
            }
        }

        return precio;
    }

    /**
     * **************************************************************
     ** Carga los procuctos de la BBDD, crea Objetos con sus datos ** * y los
     * añade a la listaProductos **
     ***************************************************************
     */
    public static void cargarProductosBBDD() {
         try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
        String SQL_select = "SELECT * FROM Productos";
        Producto aux;
        listaProductos = new ArrayList<Producto>();
        int id;
        String sprecio;
        double precio;
        String descripcion;
        try {
            ResultSet resultado = Agente.select(SQL_select);
            while (resultado.next()) {
                id = resultado.getInt(1);
                sprecio = resultado.getString(3);
                precio = Double.parseDouble(sprecio);
                descripcion = resultado.getString(2);
                aux = new Producto(id,precio, descripcion);
                listaProductos.add(aux);

            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar los Productos : " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

    }


    public static void darAltaProd(Producto c) {
        String SQL_select = "INSERT INTO Productos(Descripcion,Precio) VALUES('" + c.getDescripcion() + "','" + c.getPrecio() + "')";

        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.insert(SQL_select);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al insertar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.desconectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    
    public static void modProd(Producto c) {
        String SQL_select = "UPDATE Productos set Descripcion='"+ c.getDescripcion() + "'WHERE cod_prod=" + c.getId() + ";";
        String SQL_select2 = "UPDATE Productos set Precio='"+ c.getPrecio()+ "'WHERE cod_prod=" + c.getId() + ";";

        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.insert(SQL_select);
            Agente.insert(SQL_select2);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al modificar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.desconectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }
     public static void buscarPrducto(Producto p) {
        String SQL_select = "SELECT cod_prod FROM Productos WHERE Descripcion='" + p.getDescripcion()+"';";
        int idProd = 0;
        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
        try {
            ResultSet resultado = Agente.select(SQL_select);
            while (resultado.next()) {
                idProd = resultado.getInt(1);
                p.setId(idProd);
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar los clientes : " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

    }
       public static void buscarDescProd(Producto p) {
        String SQL_select = "SELECT * FROM Productos WHERE cod_prod=" + p.getId()+";";
        int idProd = 0; 
        String desc;
        double precio;
        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
        try {
            ResultSet resultado = Agente.select(SQL_select);
            while (resultado.next()) {
                idProd = resultado.getInt(1);
                desc=resultado.getString(2);
                precio=resultado.getDouble(3);
                p.setDescripcion(desc);
                p.setPrecio(precio);
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar los clientes : " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

    }
    
     public static void eliProd(Producto c) {
        String SQL_select = "DELETE FROM Productos WHERE cod_prod=" + c.getId() + ";";
        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.insert(SQL_select);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al eliminar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.desconectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }
    public static ArrayList<Producto> getListaProductos() {
        return listaProductos;
    }

}
